{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Action1_LSTM_(60,1)_meijimu_stock"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.layers import Dropout, Dense, LSTM\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import pandas as pd\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error, mean_absolute_error\n",
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>股票代码</th>\n",
       "      <th>名称</th>\n",
       "      <th>收盘价</th>\n",
       "      <th>最高价</th>\n",
       "      <th>最低价</th>\n",
       "      <th>开盘价</th>\n",
       "      <th>前收盘</th>\n",
       "      <th>涨跌额</th>\n",
       "      <th>涨跌幅</th>\n",
       "      <th>换手率</th>\n",
       "      <th>成交量</th>\n",
       "      <th>成交金额</th>\n",
       "      <th>总市值</th>\n",
       "      <th>流通市值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2195</th>\n",
       "      <td>2011/9/29</td>\n",
       "      <td>'002621</td>\n",
       "      <td>N三垒</td>\n",
       "      <td>24.08</td>\n",
       "      <td>25.15</td>\n",
       "      <td>22.88</td>\n",
       "      <td>23.98</td>\n",
       "      <td>24.00</td>\n",
       "      <td>0.08</td>\n",
       "      <td>0.3333</td>\n",
       "      <td>57.5282</td>\n",
       "      <td>11522900</td>\n",
       "      <td>2.806628e+08</td>\n",
       "      <td>2408000000</td>\n",
       "      <td>482322400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2194</th>\n",
       "      <td>2011/9/30</td>\n",
       "      <td>'002621</td>\n",
       "      <td>大连三垒</td>\n",
       "      <td>22.69</td>\n",
       "      <td>23.80</td>\n",
       "      <td>22.05</td>\n",
       "      <td>23.10</td>\n",
       "      <td>24.08</td>\n",
       "      <td>-1.39</td>\n",
       "      <td>-5.7724</td>\n",
       "      <td>26.7312</td>\n",
       "      <td>5354251</td>\n",
       "      <td>1.215095e+08</td>\n",
       "      <td>2269000000</td>\n",
       "      <td>454480700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2193</th>\n",
       "      <td>2011/10/10</td>\n",
       "      <td>'002621</td>\n",
       "      <td>大连三垒</td>\n",
       "      <td>23.60</td>\n",
       "      <td>24.18</td>\n",
       "      <td>22.36</td>\n",
       "      <td>22.66</td>\n",
       "      <td>22.69</td>\n",
       "      <td>0.91</td>\n",
       "      <td>4.0106</td>\n",
       "      <td>22.7764</td>\n",
       "      <td>4562109</td>\n",
       "      <td>1.065325e+08</td>\n",
       "      <td>2360000000</td>\n",
       "      <td>472708000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2192</th>\n",
       "      <td>2011/10/11</td>\n",
       "      <td>'002621</td>\n",
       "      <td>大连三垒</td>\n",
       "      <td>24.13</td>\n",
       "      <td>25.85</td>\n",
       "      <td>23.70</td>\n",
       "      <td>24.25</td>\n",
       "      <td>23.60</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2.2458</td>\n",
       "      <td>34.9752</td>\n",
       "      <td>7005537</td>\n",
       "      <td>1.723708e+08</td>\n",
       "      <td>2413000000</td>\n",
       "      <td>483323900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2191</th>\n",
       "      <td>2011/10/12</td>\n",
       "      <td>'002621</td>\n",
       "      <td>大连三垒</td>\n",
       "      <td>24.80</td>\n",
       "      <td>25.15</td>\n",
       "      <td>22.55</td>\n",
       "      <td>23.60</td>\n",
       "      <td>24.13</td>\n",
       "      <td>0.67</td>\n",
       "      <td>2.7766</td>\n",
       "      <td>30.1920</td>\n",
       "      <td>6047448</td>\n",
       "      <td>1.458584e+08</td>\n",
       "      <td>2480000000</td>\n",
       "      <td>496744000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2020/10/12</td>\n",
       "      <td>'002621</td>\n",
       "      <td>美吉姆</td>\n",
       "      <td>6.96</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.72</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.86</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1.4577</td>\n",
       "      <td>0.5032</td>\n",
       "      <td>4071930</td>\n",
       "      <td>2.812961e+07</td>\n",
       "      <td>5753573554</td>\n",
       "      <td>5632501229</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2020/10/13</td>\n",
       "      <td>'002621</td>\n",
       "      <td>美吉姆</td>\n",
       "      <td>6.95</td>\n",
       "      <td>6.96</td>\n",
       "      <td>6.84</td>\n",
       "      <td>6.95</td>\n",
       "      <td>6.96</td>\n",
       "      <td>-0.01</td>\n",
       "      <td>-0.1437</td>\n",
       "      <td>0.2279</td>\n",
       "      <td>1844460</td>\n",
       "      <td>1.275408e+07</td>\n",
       "      <td>5745306926</td>\n",
       "      <td>5624408555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2020/10/14</td>\n",
       "      <td>'002621</td>\n",
       "      <td>美吉姆</td>\n",
       "      <td>6.85</td>\n",
       "      <td>7.16</td>\n",
       "      <td>6.84</td>\n",
       "      <td>6.93</td>\n",
       "      <td>6.95</td>\n",
       "      <td>-0.1</td>\n",
       "      <td>-1.4388</td>\n",
       "      <td>0.4038</td>\n",
       "      <td>3267859</td>\n",
       "      <td>2.279647e+07</td>\n",
       "      <td>5662640639</td>\n",
       "      <td>5543481813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2020/10/15</td>\n",
       "      <td>'002621</td>\n",
       "      <td>美吉姆</td>\n",
       "      <td>7.04</td>\n",
       "      <td>7.23</td>\n",
       "      <td>6.90</td>\n",
       "      <td>7.02</td>\n",
       "      <td>6.85</td>\n",
       "      <td>0.19</td>\n",
       "      <td>2.7737</td>\n",
       "      <td>0.7743</td>\n",
       "      <td>6265798</td>\n",
       "      <td>4.435304e+07</td>\n",
       "      <td>5819706584</td>\n",
       "      <td>5697242623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2020/10/16</td>\n",
       "      <td>'002621</td>\n",
       "      <td>美吉姆</td>\n",
       "      <td>7.07</td>\n",
       "      <td>7.19</td>\n",
       "      <td>6.97</td>\n",
       "      <td>7.00</td>\n",
       "      <td>7.04</td>\n",
       "      <td>0.03</td>\n",
       "      <td>0.4261</td>\n",
       "      <td>0.5747</td>\n",
       "      <td>4651108</td>\n",
       "      <td>3.302721e+07</td>\n",
       "      <td>5844506470</td>\n",
       "      <td>5721520645</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2196 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              日期     股票代码    名称    收盘价    最高价    最低价    开盘价    前收盘    涨跌额  \\\n",
       "2195   2011/9/29  '002621   N三垒  24.08  25.15  22.88  23.98  24.00   0.08   \n",
       "2194   2011/9/30  '002621  大连三垒  22.69  23.80  22.05  23.10  24.08  -1.39   \n",
       "2193  2011/10/10  '002621  大连三垒  23.60  24.18  22.36  22.66  22.69   0.91   \n",
       "2192  2011/10/11  '002621  大连三垒  24.13  25.85  23.70  24.25  23.60   0.53   \n",
       "2191  2011/10/12  '002621  大连三垒  24.80  25.15  22.55  23.60  24.13   0.67   \n",
       "...          ...      ...   ...    ...    ...    ...    ...    ...    ...   \n",
       "4     2020/10/12  '002621   美吉姆   6.96   6.99   6.72   6.99   6.86    0.1   \n",
       "3     2020/10/13  '002621   美吉姆   6.95   6.96   6.84   6.95   6.96  -0.01   \n",
       "2     2020/10/14  '002621   美吉姆   6.85   7.16   6.84   6.93   6.95   -0.1   \n",
       "1     2020/10/15  '002621   美吉姆   7.04   7.23   6.90   7.02   6.85   0.19   \n",
       "0     2020/10/16  '002621   美吉姆   7.07   7.19   6.97   7.00   7.04   0.03   \n",
       "\n",
       "          涨跌幅      换手率       成交量          成交金额         总市值        流通市值  \n",
       "2195   0.3333  57.5282  11522900  2.806628e+08  2408000000   482322400  \n",
       "2194  -5.7724  26.7312   5354251  1.215095e+08  2269000000   454480700  \n",
       "2193   4.0106  22.7764   4562109  1.065325e+08  2360000000   472708000  \n",
       "2192   2.2458  34.9752   7005537  1.723708e+08  2413000000   483323900  \n",
       "2191   2.7766  30.1920   6047448  1.458584e+08  2480000000   496744000  \n",
       "...       ...      ...       ...           ...         ...         ...  \n",
       "4      1.4577   0.5032   4071930  2.812961e+07  5753573554  5632501229  \n",
       "3     -0.1437   0.2279   1844460  1.275408e+07  5745306926  5624408555  \n",
       "2     -1.4388   0.4038   3267859  2.279647e+07  5662640639  5543481813  \n",
       "1      2.7737   0.7743   6265798  4.435304e+07  5819706584  5697242623  \n",
       "0      0.4261   0.5747   4651108  3.302721e+07  5844506470  5721520645  \n",
       "\n",
       "[2196 rows x 15 columns]"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meijimu = pd.read_csv('./002621.csv')  # 读取股票文件\n",
    "meijimu[::-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "日期        2011/9/29\n",
       "股票代码        '002621\n",
       "名称              N三垒\n",
       "收盘价           24.08\n",
       "最高价           25.15\n",
       "最低价           22.88\n",
       "开盘价           23.98\n",
       "前收盘              24\n",
       "涨跌额            0.08\n",
       "涨跌幅          0.3333\n",
       "换手率         57.5282\n",
       "成交量        11522900\n",
       "成交金额    2.80663e+08\n",
       "总市值      2408000000\n",
       "流通市值      482322400\n",
       "Name: 2195, dtype: object"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# meijimu = meijimu[::-1]\n",
    "meijimu.iloc[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set = meijimu.iloc[0:2196 - 300, 6:7].values  # 前(2196-300=1896)天的开盘价作为训练集,表格从0开始计数，6:7是提取[6:7)列，前闭后开,故提取出开盘价\n",
    "test_set = meijimu.iloc[2196 - 300:, 6:7].values  # 后300天也就是最近的300天的开盘价作为测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((1896, 1), (300, 1))"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set.shape,test_set.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 归一化\n",
    "sc = MinMaxScaler(feature_range=(0, 1))  # 定义归一化：归一化到(0，1)之间\n",
    "train_set_scaled = sc.fit_transform(train_set)  # 求得训练集的最大值，最小值这些训练集固有的属性，并在训练集上进行归一化\n",
    "test_set = sc.transform(test_set)  # 利用训练集的属性对测试集进行归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = []\n",
    "y_train = []\n",
    "\n",
    "x_test = []\n",
    "y_test = []\n",
    "\n",
    "# 测试集：csv表格中前2196-300=1896天数据\n",
    "# 利用for循环，遍历整个训练集，提取训练集中连续60天的开盘价作为输入特征x_train，第61天的数据作为标签，for循环共构建2196-300-60=1836组数据。\n",
    "for i in range(60, len(train_set_scaled)):\n",
    "    x_train.append(train_set_scaled[i - 60:i, 0]) # 1836\n",
    "    y_train.append(train_set_scaled[i, 0]) # 1836"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.38624019312009655"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对训练集进行打乱\n",
    "np.random.seed(7)\n",
    "np.random.shuffle(x_train)\n",
    "np.random.seed(7)\n",
    "np.random.shuffle(y_train)\n",
    "tf.random.set_seed(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将训练集由list格式变为array格式\n",
    "x_train, y_train = np.array(x_train), np.array(y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.53651177, 0.51297526, 0.52082076, ..., 0.52172601, 0.51297526,\n",
       "        0.51991551],\n",
       "       [0.38322269, 0.38624019, 0.38925769, ..., 0.39921545, 0.38774894,\n",
       "        0.37718769],\n",
       "       [0.75709113, 0.70911285, 0.69764635, ..., 0.        , 0.        ,\n",
       "        0.        ],\n",
       "       ...,\n",
       "       [0.4097767 , 0.41128546, 0.42607121, ..., 0.46167773, 0.47163549,\n",
       "        0.46710923],\n",
       "       [0.65479783, 0.64182257, 0.62854556, ..., 0.84791792, 0.86541943,\n",
       "        0.85485818],\n",
       "       [0.4073627 , 0.3983102 , 0.40102595, ..., 0.35304768, 0.3922752 ,\n",
       "        0.3940857 ]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1836, 60)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1836, 60, 1)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使x_train符合RNN输入要求：[送入样本数， 循环核时间展开步数， 每个时间步输入特征个数]。\n",
    "# 此处整个数据集送入，送入样本数为x_train.shape[0]即1836组数据；输入60个开盘价，预测出第61天的开盘价，循环核时间展开步数为60; 每个时间步送入的特征是某一天的开盘价，只有1个数据，故每个时间步输入特征个数为1\n",
    "x_train = np.reshape(x_train, (x_train.shape[0], 60, 1))\n",
    "x_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 测试集：csv表格中后300天数据\n",
    "# 利用for循环，遍历整个测试集，提取测试集中连续60天的开盘价作为输入特征x_train，第61天的数据作为标签，for循环共构建300-60=240组数据。\n",
    "for i in range(60, len(test_set)):\n",
    "    x_test.append(test_set[i - 60:i, 0])\n",
    "    y_test.append(test_set[i, 0])\n",
    "# 测试集变array并reshape为符合RNN输入要求：[送入样本数， 循环核时间展开步数， 每个时间步输入特征个数]\n",
    "x_test, y_test = np.array(x_test), np.array(y_test)\n",
    "x_test = np.reshape(x_test, (x_test.shape[0], 60, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建LSTM模型\n",
    "model = tf.keras.Sequential([\n",
    "    LSTM(80, return_sequences=True),\n",
    "    Dropout(0.2),\n",
    "    LSTM(100),\n",
    "    Dropout(0.2),\n",
    "    Dense(1)\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 配置优化器，损失函数\n",
    "# 该应用只观测loss数值，不观测准确率，所以删去metrics选项，一会在每个epoch迭代显示时只显示loss值\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(0.001),\n",
    "              loss='mean_squared_error')  # 损失函数用均方误差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置checkpoint配置路径\n",
    "checkpoint_save_path = \"./checkpoint/LSTM_stock.ckpt\"\n",
    "\n",
    "if os.path.exists(checkpoint_save_path + '.index'):\n",
    "    print('-------------load the model-----------------')\n",
    "    model.load_weights(checkpoint_save_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 回调函数，保存最优模型\n",
    "cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,\n",
    "                                                 save_weights_only=True,\n",
    "                                                 save_best_only=True,\n",
    "                                                 monitor='val_loss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "29/29 [==============================] - 4s 130ms/step - loss: 0.0100 - val_loss: 6.9348e-04\n",
      "Epoch 2/10\n",
      "29/29 [==============================] - 4s 134ms/step - loss: 0.0094 - val_loss: 3.6851e-04\n",
      "Epoch 3/10\n",
      "29/29 [==============================] - 3s 116ms/step - loss: 0.0087 - val_loss: 3.1641e-04\n",
      "Epoch 4/10\n",
      "29/29 [==============================] - 4s 138ms/step - loss: 0.0086 - val_loss: 7.1571e-04\n",
      "Epoch 5/10\n",
      "29/29 [==============================] - 4s 139ms/step - loss: 0.0079 - val_loss: 6.4727e-04\n",
      "Epoch 6/10\n",
      "29/29 [==============================] - 4s 142ms/step - loss: 0.0083 - val_loss: 2.8164e-04\n",
      "Epoch 7/10\n",
      "29/29 [==============================] - 4s 124ms/step - loss: 0.0077 - val_loss: 4.9133e-04\n",
      "Epoch 8/10\n",
      "29/29 [==============================] - 3s 106ms/step - loss: 0.0076 - val_loss: 2.1031e-04\n",
      "Epoch 9/10\n",
      "29/29 [==============================] - 3s 117ms/step - loss: 0.0073 - val_loss: 2.2210e-04\n",
      "Epoch 10/10\n",
      "29/29 [==============================] - 3s 115ms/step - loss: 0.0072 - val_loss: 8.3683e-04\n"
     ]
    }
   ],
   "source": [
    "# 模型训练拟合\n",
    "history = model.fit(x_train, y_train, batch_size=64, epochs=10, validation_data=(x_test, y_test), validation_freq=1,\n",
    "                    callbacks=[cp_callback])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "lstm (LSTM)                  (None, 60, 80)            26240     \n",
      "_________________________________________________________________\n",
      "dropout (Dropout)            (None, 60, 80)            0         \n",
      "_________________________________________________________________\n",
      "lstm_1 (LSTM)                (None, 100)               72400     \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 100)               0         \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 1)                 101       \n",
      "=================================================================\n",
      "Total params: 98,741\n",
      "Trainable params: 98,741\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# 模型参数\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 查看训练过程中梯度下降更新的weights和bias\n",
    "file = open('./weights.txt', 'w')  # 参数提取\n",
    "for v in model.trainable_variables:\n",
    "    file.write(str(v.name) + '\\n')\n",
    "    file.write(str(v.shape) + '\\n')\n",
    "    file.write(str(v.numpy()) + '\\n')\n",
    "file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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++zBXJeZQu/uXZpfkIjISdIuZ5j07t6Ff512Osvvmsbj109gSO84HnpnM5Mf/Cs/WpjD2rzicDdRJGymTp3Ku+++W2fab3/7W773ve81Waf6NPHGLgkdyqWfFy1axIYNG2re/+IXv+D9999vQesbtmzZMi6//PKTXk5rUg8gzKIiI7h0TH8uHdOfz/cc4LmVO3h1dR6vrskjPSWBGycP4bKxA+gSpR+ZSXDMmTOHBQsWcMkll9RMW7BgAb/+9a9Dqr9kyZLmCzVi0aJFXH755Ywa5d348Je//OUJL6u9Uw+gHRnerwe/nDWGlT+9kP+cOZoDZeX8cGEO5zzwV3797ibyi0O7jolIR3fNNdfw5ptvcuTIEQC2b99Ofn4+X/va1/jud79LZmYmo0eP5p577mmwfvUloQHuv/9+RowYwUUXXcTmzZtryjz55JNMnDiR9PR0rr76ag4fPsxHH33E4sWLufPOO8nIyGDr1q3MmzePV155BYClS5cybtw40tLSuPnmm2val5qayj333MP48eNJS0tj06ZNIa/riy++SFpaGmPGjOHHP/4xQKOXmH7kkUcYNWoUY8eOZfbs2S38Vo+nHkA71CM2mhvPSWXu5CH8Y8s+nl2xnceWbeWxZVu5eFR/5p4zhMnDdMNuOUXevht2f9a6y+yfBtMfbHR27969mTRpEu+88w6zZs1iwYIFXHfddZgZ999/P7169aKyspILL7yQtWvXMnbs2AaXs3r1ahYsWMCnn35KRUUF48ePZ8KECQBcddVV3HLLLQD8/Oc/5+mnn+aOO+5g5syZXH755VxzzTV1llVWVsa8efNYunQpZ5xxBnPnzuWxxx7j+9//PgB9+vRhzZo1/P73v+fhhx/mqaeeavZryM/P58c//jGrV68mMTGRiy++mEWLFpGSktLgJaYffPBBtm3bRpcuXVrlstPqAbRjZsbXhvfhybmZfHDnNG6dchofb9vHt578mIt/s5znVmzn4JGKcDdTpE1UDwOBN/wzZ453YeGFCxcyfvx4xo0bx/r16+uM19f397//nW984xvExcURHx/PzJkza+atW7eO8847j7S0NF544QXWr1/fZHs2b97M0KFDOeOMMwC48cYbWb58ec38q666CmjZZadXrVrF1KlTSUpKIioqim9/+9ssX768ziWm33nnHeLj4wEYO3Ys3/72t3n+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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘图训练loss\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "\n",
    "plt.plot(loss, label='train Loss')\n",
    "plt.plot(val_loss, label='Validation Loss')\n",
    "plt.title('train and Validation Loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "################## predict ######################\n",
    "# 测试集输入模型进行预测\n",
    "predicted_stock_price = model.predict(x_test)\n",
    "# 对预测数据还原---从（0，1）反归一化到原始范围\n",
    "predicted_stock_price = sc.inverse_transform(predicted_stock_price)\n",
    "# 对真实数据还原---从（0，1）反归一化到原始范围\n",
    "real_stock_price = sc.inverse_transform(test_set[60:])\n",
    "# 画出真实数据和预测数据的对比曲线\n",
    "plt.plot(real_stock_price, color='red', label='meijimu Stock Price')\n",
    "plt.plot(predicted_stock_price, color='blue', label='Predicted meijimu Stock Price')\n",
    "plt.title('meijimu Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('meijimu Stock Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(240, 1)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "real_stock_price.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "均方误差: 0.919053\n",
      "均方根误差: 0.958673\n",
      "平均绝对误差: 0.875848\n"
     ]
    }
   ],
   "source": [
    "##########evaluate##############\n",
    "# calculate MSE 均方误差 ---> E[(预测值-真实值)^2] (预测值减真实值求平方后求均值)\n",
    "mse = mean_squared_error(predicted_stock_price, real_stock_price)\n",
    "# calculate RMSE 均方根误差--->sqrt[MSE]    (对均方误差开方)\n",
    "rmse = math.sqrt(mean_squared_error(predicted_stock_price, real_stock_price))\n",
    "# calculate MAE 平均绝对误差----->E[|预测值-真实值|](预测值减真实值求绝对值后求均值）\n",
    "mae = mean_absolute_error(predicted_stock_price, real_stock_price)\n",
    "print('均方误差: %.6f' % mse)\n",
    "print('均方根误差: %.6f' % rmse)\n",
    "print('平均绝对误差: %.6f' % mae)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color=red size=6>模型预测探索-失败，预测不能用预测数据作为测试集。。</font>\n",
    "\n",
    "<font color=red size=6>要考虑在输入、输出时间步长上处理这个问题</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_predict = list(y_test[-60:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_predict = list()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 预测未来30天，将每60时序预测的值作为新的60时序的结尾值，输入模型进行预测\n",
    "for i in range(30):\n",
    "    temp_predict = model.predict(np.reshape(np.array(x_predict),(1,60,1)))[0][0]\n",
    "    y_predict.append(temp_predict)\n",
    "    x_predict.append(temp_predict)\n",
    "    x_predict = x_predict[1:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_forecast = np.reshape(np.array(y_predict),(len(y_predict),1))\n",
    "y_forecast = sc.inverse_transform(y_forecast) # 反转归一化\n",
    "y_forecast = np.concatenate((predicted_stock_price,y_forecast))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(real_stock_price, color='red', label='meijimu Stock Price')\n",
    "plt.plot(predicted_stock_price, color='blue', label='Predicted meijimu Stock Price')\n",
    "plt.plot(y_forecast, color='green', label='Forecast the future 30-day trend')\n",
    "plt.title('meijimu Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('meijimu Stock Price')\n",
    "plt.legend()\n",
    "plt.show()="
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.0 64-bit ('Bi_env': venv)",
   "language": "python",
   "name": "python38064bitbienvvenvba07af95a1bb4b078aa8134bba84dff2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
